package main

import "fmt"
//import "unsafe"
// import "strconv"


func main(){
	var num = 12
	fmt.Printf("num得类型为：%T",num)      //默认的整数类型为int
	
	//浮点数得表示
	var num1 float32 = 3.14
	var num2 float32 = 314E-2
	var num3 float32 = 314E+2
	var num4 float32 = 314e-2
	fmt.Println(num1,num2,num3,num4)
	var f1 = 3.15
	fmt.Printf("f1的类型为：%T",f1)   //默认的浮点类型为float64
	fmt.Println()

	//布尔类型
	var flag01 bool = true
	var flag02 bool = false
	fmt.Println(flag01,flag02)
	
	
	
	//\n 换行
	fmt.Println("aaa\nbbb")

	//\b 退格
	fmt.Println("aaa\bbbb\n")

	// \r 光标回到本行的开头，后续输入就会替换原有的字符
	fmt.Println("aaaaa\rbbb")

	// \t 制表符
	fmt.Println("aaaaaaaa")
	fmt.Println("aaaaaaaa\tbbb")

	// \"
	fmt.Println("Pri\"ntln")	
	
	
	
	//定义一个字符串
	var s1 string = "hello"
	//字符串不能改变
	//s1[0] = "1"
	//var s2 string = "world"

	//fmt.Println(s1+s2)

	//默认值
	var a int
	var b float32
	var c float64
	var d bool
	var e string
	fmt.Println(a,b,c,d,e)

	//基本数据之间的类型转换
	var n1 int = 10 
	var n2 float32 = float32(n1)      //将int类型转成float32类型
	fmt.Println(n2)
	fmt.Printf("n1的类型为：%T",n1)   //类型转换不会改变原变量的类型，只会改变该变量对应的值的类型

	var n3 int64 = 888888
	var n4 int8 = int8(n3)           //将大类型转成小类型时，编译不会出错，但是和造成数据的溢出
	fmt.Println(n4)                  //输出 56

	//基本数据类型转string
	var n1 int  = 10 
	var n2 float32 = 1.23
	var n3 bool = true
	var n4 byte = 'a'

	//int 转string
	var s1 string = fmt.Sprintf("%d",n1)
	fmt.Printf("s1对应的类型是；%T,s1 = %q\n",s1,s1)
	// 浮点类型转string
	var s2 string = fmt.Sprintf("%f",n2)
	fmt.Printf("s2对应的类型是；%T,s2 = %q\n",s2,s2)
	//布尔类型转string
	var s3 string = fmt.Sprintf("%t",n3)
	fmt.Printf("s3对应的类型是；%T,s3 = %q\n",s3,s3)
	//字符转string
	var s4 string = fmt.Sprintf("%c",n4)
	fmt.Printf("s4对应的类型是；%T,s4 = %q\n",s4,s4)
	
	string转基本数据类型
	string 转 bool
	var s1 string = "true"
	var b bool
	b , _ = strconv.ParseBool(s1)
	fmt.Printf("b的类型是：%T,b=%v\n",b,b)

	//string 转int64
	var s2 string = "10"
	var num1 int64
	num1,_ = strconv.ParseInt(s2,10,64)
	fmt.Printf("num1的类型是：%T,num1=%v\n",num1,num1)

	//string 转float32/float64
	var s3 string = "3.14"
	var f float64
	f,_ = strconv.ParseFloat(s3,64)
	fmt.Printf("f的类型是：%T.f=%v\n",f,f)
	//注意，string向基本数据类型转换时，一定要确保string类型能够转成对应的有效数据类型，否则最后得到的会是按照对应的数据类型的默认值进行输出
	var s4 string = "hello"
	var b2 bool
	b2,_ = strconv.ParseBool(s4)
	fmt.Printf("b2的类型是：%T,b2=%V",b2,b2)
	
	var num int = 10 
	//指针的定义
	var prt *int = &num
	fmt.Println(prt)
	fmt.Println(*prt)

	*prt = 8    //
	 
	
	

}